LinuC-1 - 102試験 - 1.06:シェルおよびスクリプト - 1.06.1 シェル環境のカスタマイズ

Last Update : August 21 2022 17:47:19

     

a. 環境変数とシェル変数

環境変数は、Linuxのシステム内で利用する共通データが入れられている変数のことでLinuxが提供する共有機能の一つです。Linux上で動作するタスク(プロセス)がデータを共有するための仕組みです。
シェル変数とは、環境変数と類似しているが、シェル内で独自に保持しているものであり、シェル以外のプロセスでは使用しません。


1.bash の環境変数を確認する

現在、デフォルトで追加されているbashの環境変数を表示させるには、env 、もしくは、echo $PATH を実行します。

$ echo $PATH
/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11
:/usr/X11R6/bin:/root/bin

新しくパスを追加したい場合は、export コマンドを使って、export PATH=$PATH:追加するパス のようにします。以下では、Apache2のパスを追加した例です。

# export PATH=$PATH:/usr/local/apache2/bin/
# echo $PATH

/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11
:/usr/X11R6/bin:/root/bin:/usr/local/apache2/bin/

上記のようにすることで新しいパスを追加することができましたが、export コマンドでは一時的にしか反映されず、システム再起動時や、再ログイン時には無効になってしまいます。けれども、その都度 export コマンドを使用してパスを追加していたので面倒です。恒久的に有効にするために .bash_profile に上記のコマンドを追加します。.bash_profile は各ユーザーごとにホームディレクトリ直下にデフォルトで用意されていますのでそれを編集します。ここでは、Apache2 に加えてOpenSSLのパスも追加してみます。複数のパスを追加する場合は、コロン「 : 」で区切って列挙していってください。

# ls -la
-rw-r--r-- 1 root root 293 12月 30 11:26 .bash_profile
-rw-r--r-- 1 root root 176 8月 24 1995 .bashrc

# vi .bash_profile
PATH=$PATH:$HOME/bin
BASH_ENV=$HOME/.bashrc
USERNAME="root"
export PATH=$PATH:/usr/local/apache2/bin:/usr/local/ssl/bin

これで長たらしいパスをいちいち入力する手間が省けました。ここでもう一度、echo $PATH コマンドを実行すると、シェルにはexport コマンドで実行したApache のパスは追加されていますが、OpenSSL のパスはシェルに反映されていません。これでは有効になっているとはいえ表示上、不都合なので source コマンドを使ってシェルにも反映させます。

# echo $PATH
/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11
:/usr/X11R6/bin:/root/bin:/usr/local/apache2/bin:/root/bin
:/usr/local/apache2/bin
# source .bash_profile
# echo $PATH

/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11
:/usr/X11R6/bin:/root/bin:/usr/local/apache2/bin:/root/bin
:/usr/local/apache2/bin:/usr/local/ssl/bin

なお、.bash_profile の他にも .bashrc というファイルも存在し、.bashrc では別のシェルが起動したときにも実行されるようになるので、例えば、startx コマンドでX Windows にログインし、kterm を使用した時にも実行できるようになります。



b. エイリアス

コマンド名やオプションの引数は憶えにくいものがありますし、よく使うコマンドは簡単に使えるようにしたいということがあります。このようなときはエイリアス機能により、コマンドラインに自分の好みの名前をつけて、登録しておくことができます。エイリアス機能を使うには alias コマンドで登録と表示を、unalias コマンドで取り消しを行います。

aliasコマンドで登録したものはログアウト時に自動的に取り消されてしまいます。登録したものを常に使いたい場合は、「.bashrc」などシェルの設定ファイルに記述し、ログインすると同時にエイリアスが有効になるようにしておきます。なお、ディストリビューションにより異なると思いますが、システムによりaliasコマンドで設定されているコマンドが幾つかあります。

● alias コマンド構文
  alias [name][=コマンド]

「ls -al」を「la」で登録
$ alias la="ls -al"

既に設定されているエイリアスは alias コマンドで確認できます。
$ alias alias cp='cp -i' alias l.='ls -d .* --color=auto' alias la='ls -al' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

● unalias コマンド構文
  unalias name

「la」のエイリアスを削除
$ unalias la


c. 関数の定義

1. 関数

ある一連の処理をまとめて一つの機能としたものを関数という。 似たような処理を複数箇所で実行している場合は、その一連の処理を関数化して利用すると便利である。

● 関数の定義(※定義時は関数名に「( )」を付ける)
function 関数名() { 処理 return 値 }

● 頭につける「function」は省略可
関数名() { 処理 return 値 }

● 関数の呼び出し(※呼び出し時は「( )」は不要)
関数名 引数リスト

関数名とその関数の処理を定義することで、一連の処理を関数を呼び出すことが可能になります。 通常、関数の最後には return コマンドを指定し、その引数として与えた値が関数の終了ステータスとなります。 return コマンドの引数に指定できる値は、1~255 の正の整数のみです。 (マイナスの値も指定可能ですが、-1 を指定した場合は結果的に 255 になります。紛らわしいので、1~255 の正の整数以外は指定しないようにしましょう。)

この return コマンドは省略可能で、省略された場合は関数内で最後に実行されたコマンドの終了ステータスが、関数自体の終了ステータスとなります。

関数を呼び出すときは、関数名と引数のリストを指定します。引数は省略可能です。 呼び出すときの関数名は C 言語などのように「()」を付ける必要はありません。 func() ではなく func のように、単純に関数名のみを指定します。


2. 変数

変数は必要なときに名前を指定してすぐに使うことが出来ますが、この場合のデータは文字データとして変数に格納されます。一方、変数は明示的に宣言してから使用することも出来ますが、この場合はいろいろな属性を与えることが出来ます。 変数の宣言は declare または typeset コマンド、及び local コマンドで行います。declareコマンドには次のようなオプションがあります。

● declare コマンド構文
  declare [オプション] [変数名[=値]]

● declare コマンドオプション
 -a変数を配列として作成します
 -i変数を整数型(integer)として作成します
 -r変数を参照のみ可能(read only)として作成します。宣言時に値を与えておきます
また、read onlyの解除は「+r」オプションで再宣言を行う
 -f定義済関数を表示します
 -F定義済関数名を表示します

変数には有効範囲があります。つまり、シェルスクリプト中のどこでも使えるもの(グローバル変数)と、関数内だけで使えるもの(ローカル変数)です。関数内でlocalコマンドで宣言しますとローカル変数になります。それ以外の変数はグローバル変数です。また、位置パラメータはローカル変数です。


d. bashの設定ファイル

bashの設定ファイルの実行順序

1. /etc/profile
ログインしてまず読み込む
ユーザ全体向けの環境変数を書く
2. /etc/profile.d/
/etc/profileのスクリプトにより/etc/profile.d/の下にあるスクリプトが実行される。
3. ~/.bash_profile
ログイン時に読み込まれ、システム・プロファイルの/etc/profileの次に実行されます。当ファイルが無い場合は~/.bash_loginを探し、これもない場合は~/.profileを探します。 個別ユーザ向けの環境変数はここに書く
4. ~/.bashrc
Bash起動時に読み込まれ、 ~/.bash_profileのスクリプトによって実行される
エイリアスなどシェルの基本設定を書く
.bash_loginファイルが存在する場合には実行されない。
bashコマンドの実行、或はviエディタの「:sh」コマンドやシェルスクリプトを実行するとシェルが起動されます。このシェルをサブシェルと呼んでおり、~/.bashrcはサブシェル起動時に実行されます。また、当然のことながら、ログイン時にはBashを起動しますので、ログイン時にも起動されます。
5. /etc/bashrc
~/.bashrc のスクリプトによって実行される
全ユーザ向けの設定を書く
6. ~/.bash_logout
bashがログアウトする直前にこのスクリプトを実行される。
標準ではファイルは用意されないようです。必要ならば作成します。

z. 出題範囲概要

概要 :
  • ユーザの要求に応じてシェル環境をカスタマイズできる。全体のプロファイルおよびユーザのプロファイルを変更する。

詳細 :
  • ログイン時または新しいシェルを生成したときに、環境変数(PATHなど)を設定する。
    /etc/bash.bashrc, /etc/profile
    ~/.bash_profile, ~/.bash_login, ~/.profile, ~/.bashrc, ~/.bash_logout
    ., source, lists(;, &&, ||)
  • コマンド置換を使用する。
    alias
  • コマンドサーチパスを適切なディレクトリに設定する。
    PATH

  [ 例題 ] 


         

    www.it-shikaku.jp